這裡說的快取是,伺服器通常拿資料的時候可能會去跟資料庫索取資料,而快取會將曾經索取過的資料存放到記憶體中,當下次再拿資料的時候就可以直接從記憶體中拿取,讓回應時間變短。
建構一個static 的類別(靜態字典)
//私有化為了安全,靜態為了常駐內存 Dictionary保存多個keyValuePair
privatic static Dictionary<string,object> CustomCacheDictionary = new Dictionary,string,object>();
public static void Add(string key,object value)
{
CustomCachDictionary[key] = value;
}
public static T Get<T>(string key)
{
return (T)CustomCachDicitionary[key];
}
public static bool Contains(string key)
{
return CustomCacheDicitionary.ContainsKey(key);
}
要使用就只需要,先用if判斷Contains 內存使否已經有包含資料
如果沒有再從資料庫抓取 並把資料偷過Add方法傳入Dictionary
如果有就直接重內存抓取透過Get方法
這裡簡單示範一下最常使用到的 MemoryCache lib
注意Key 跟data 不能給null 會有Exception
MemoryCache => 快取物件
CacheItemPolicy =>用來設定快取的回收時間
實作步驟:
//命名空間 System.Runtime.Caching
ObjectCache cache = MemoryCache.Default;
//要查詢的key
string cacheKey = "FileContents";
//判斷快取是否有這組key的資料
if (cache.Contains(cacheKey))
{
//取得快取中的資料
var data = cache[cacheKey];
}
else
{
//CacheItemPolicy 物件來提供快取專案的收回和到期詳細資料
var policy = new CacheItemPolicy();
//設定快取存活時間
policy.AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(1);
//新增資料到快取裡面
cache.Add(new CacheItem(cacheKey, "測試資料"), policy);
}
移除快取資料 =>Remove(key)
cache.Remove(cacheKey);
搭配泛型取得資料方式
/// <summary>
/// 取得快取資料
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public T Get<T>(string key)
{
if (cache.Contains(key))
{
return (T)cache[key];
}
else
{
return default(T);
}
}
關於各級快取、本地快取原理和實現、快取更新和快取應用
之後會專門寫一篇文章跟大家講解
本篇已同步發表至個人部落格
https://moushih.com/2022ithome27/